home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Format 1994 October
/
Macformat17.cdr
/
Shareware City
/
Developers
/
shutdown-fx-20-c
/
sfx control app ƒ
/
Shell ƒ
/
error.c
< prev
next >
Wrap
Text File
|
1994-07-11
|
3KB
|
95 lines
/**********************************************************************\
File: error.c
Purpose: This module handles altering the user when an error has
occurred. (If the program is currently in the background,
we use the Notification Manager to queue a notification
request and display the alert as soon as we are in the
foreground -- see main.c, DispatchEvents, case osEvt.)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program in a file named "GNU General Public License".
If not, write to the Free Software Foundation, 675 Mass Ave,
Cambridge, MA 02139, USA.
\**********************************************************************/
#include "error.h"
#include "main.h"
#include "dialogs.h"
#include "environment.h"
#include "util.h"
NMRec gMyNotification;
enum ErrorTypes gPendingResultCode;
Boolean gUsePendingParams;
Boolean gPendingETS;
static Str255 gParam1, gParam2, gParam3;
void SetErrorParameters(Str255 p1, Str255 p2, Str255 p3)
{
Mymemcpy(gParam1, p1, p1[0]+1);
Mymemcpy(gParam2, p2, p2[0]+1);
Mymemcpy(gParam3, p3, p3[0]+1);
}
void HandleError(enum ErrorTypes resultCode, Boolean exitToShell, Boolean useParams)
/* if we're in the foreground, just get the error string (from the .rsrc file) and
display the error alert; otherwise, we have to queue it, put up a notification
(if possible), and wait patiently to come back in the foreground. (see main.c,
DispatchEvents(), case osEvt. */
/* All error codes are listed in program globals.h */
{
Str255 tempStr;
Handle myResHand;
/* if there is no error, or the error is that the user cancelled an operation
in progress, don't display anything; it would only confuse them. */
if ((resultCode==userCancelErr) || (resultCode==allsWell)) return;
if (gIsInBackground) /* if program is in background, can't display alert immed. */
{
if (gHasNotificationManager) /* if they don't have notification, f*ck 'em */
{
myResHand=GetResource('SICN', 1234); /* small icon for menu bar flashing */
gMyNotification.qType=nmType; /* for more detail on these params, */
gMyNotification.nmMark=1; /* see IM Processes, 5-8 */
gMyNotification.nmIcon=myResHand;
gMyNotification.nmSound=(Handle)-1L;
gMyNotification.nmStr=0L;
gMyNotification.nmResp=0L;
gMyNotification.nmRefCon=0L;
NMInstall(&gMyNotification);
}
gPendingResultCode=resultCode; /* remember error code for later */
gUsePendingParams=useParams; /* remember for later */
gPendingETS=exitToShell; /* remember for later */
}
else
{
GetIndString(tempStr, 129, resultCode); /* get error string from .rsrc */
if (!useParams)
ParamText(tempStr, "\p", "\p", "\p");
else
ParamText(tempStr, gParam1, gParam2, gParam3);
PositionDialog('ALRT', largeAlert); /* position alert (see dialogs.c) */
StopAlert(largeAlert, 0L); /* show it */
}
if (exitToShell) /* for fatal errors */
ExitToShell();
}